import logging

import allure
import jsonpath

from utils.send_request import send_jdbc_request


@allure.step("HTTP响应断言")
def http_assert(case, res):
    # assert res.json()["meta"]["msg"] == case["expected"]
    # print(jsonpath.jsonpath(res.json(), "$.meta.msg")[0])
    if case["check"]:
        result = jsonpath.jsonpath(res.json(), case["check"])
        logging.info(f"3.HTTP响应断言内容: 实际结果({result}) == 预期结果({case["expected"]})")
        assert jsonpath.jsonpath(res.json(), case["check"])[0] == case["expected"]
    else:
        # res.json 是字典, case["expected"] 是字符串, 类型不一样, 所以要用 res.text 让类型一致才能判断
        logging.info(f"3.HTTP响应断言内容: 预期结果({case["expected"]}) == 实际结果({res.text})")
        assert case["expected"] in res.text

# @allure.step("JDBC响应断言")
def jdbc_assert(case):
    # 两个字段中有值才会去进行断言, 没有则不会进行断言
    if case["sql_check"] and case["sql_expected"]:
        # 只有需要进行JDBC断言时, 才会显示 allure.step 步骤在报告中
        with allure.step("JDBC响应断言"):
            result = send_jdbc_request(case["sql_check"])
            logging.info(f"3.JDBC响应断言内容: 实际结果({result}) == 预期结果({case["sql_expected"]})")
            assert send_jdbc_request(case["sql_check"]) == case["sql_expected"]